add_executable(sd_typed_tasks_test sd_typed_tasks_test.c)
add_executable(sd_comm_throttling sd_comm_throttling.c)
-add_executable(simdag_tracing simdag_trace.c)
-
### Add definitions for compile
if(NOT WIN32)
target_link_libraries(ex_sd_test simgrid pthread )
target_link_libraries(sd_avail simgrid pthread )
target_link_libraries(sd_typed_tasks_test simgrid pthread )
target_link_libraries(sd_comm_throttling simgrid pthread )
- target_link_libraries(simdag_tracing simgrid pthread )
add_custom_command(TARGET ex_sd_test
POST_BUILD
target_link_libraries(sd_avail simgrid)
target_link_libraries(sd_typed_tasks_test simgrid)
target_link_libraries(sd_comm_throttling simgrid)
- target_link_libraries(simdag_tracing simgrid)
add_custom_command(TARGET ex_sd_test
POST_BUILD
${CMAKE_CURRENT_SOURCE_DIR}/test_simdag.tesh
${CMAKE_CURRENT_SOURCE_DIR}/test_simdag2.tesh
${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_comm_throttling.tesh
- ${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_tracing.tesh
${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_typed_tasks.tesh
${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_avail.tesh
${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_fail.tesh
${CMAKE_CURRENT_SOURCE_DIR}/sd_test.c
${CMAKE_CURRENT_SOURCE_DIR}/sd_test2.c
${CMAKE_CURRENT_SOURCE_DIR}/sd_typed_tasks_test.c
- ${CMAKE_CURRENT_SOURCE_DIR}/simdag_trace.c
PARENT_SCOPE
)
set(bin_files
> [0.000000] [sd_task/INFO] Displaying task root
> [0.000000] [sd_task/INFO] - state: schedulable not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: COMP_SEQ
> [0.000000] [sd_task/INFO] - amount: 0
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 0
> [0.000000] [sd_task/INFO] - post-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 1@task1
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: task1
> [0.000000] [sd_task/INFO] - amount: 42000000000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 2@task2
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: task2
> [0.000000] [sd_task/INFO] - amount: 42000000000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 3@task1
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: task1
> [0.000000] [sd_task/INFO] - amount: 42000000000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 4
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task root_i2_2@task2
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: COMM_E2E
> [0.000000] [sd_task/INFO] - amount: 1000000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 1@task1_o1_3@task1
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: task1
> [0.000000] [sd_task/INFO] - amount: 1000000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 2@task2_o2_3@task1
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: task2
> [0.000000] [sd_task/INFO] - amount: 1000000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 3@task1_o3_end
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: task1
> [0.000000] [sd_task/INFO] - amount: 4167312
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task root_i1_1@task1
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: COMM_E2E
> [0.000000] [sd_task/INFO] - amount: 1000000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task end
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: COMP_SEQ
> [0.000000] [sd_task/INFO] - amount: 0
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task root
> [0.000000] [sd_task/INFO] - state: schedulable not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: COMP_SEQ
> [0.000000] [sd_task/INFO] - amount: 0
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 0
> [0.000000] [sd_task/INFO] - post-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 0
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10000000129
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 1
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10000000131
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 2
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10000000121
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 3
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10000000231
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 4
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000000005
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 5
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000000046
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 6
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000000092
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 7
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000000041
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 8
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskC
> [0.000000] [sd_task/INFO] - amount: 10000000250
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 9
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskC
> [0.000000] [sd_task/INFO] - amount: 10000000079
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 0->1
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10001
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 1->2
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10004
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 2->3
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10002
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 4->5
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10029
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 6->7
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10005
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 7->8
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 7->end
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10014000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task root->5
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: COMM_E2E
> [0.000000] [sd_task/INFO] - amount: 10014000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task end
> [0.000000] [sd_task/INFO] - state: not scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: COMP_SEQ
> [0.000000] [sd_task/INFO] - amount: 10000000129
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task root
> [0.000000] [sd_task/INFO] - state: runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: COMP_SEQ
> [0.000000] [sd_task/INFO] - amount: 0
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 0
> [0.000000] [sd_task/INFO] - post-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 0
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10000000129
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 1
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10000000131
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 2
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10000000121
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 3
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 3
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10000000231
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 4
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000000005
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 5
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000000046
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 3
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 6
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000000092
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 7
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000000041
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 8
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskC
> [0.000000] [sd_task/INFO] - amount: 10000000250
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 9
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: taskC
> [0.000000] [sd_task/INFO] - amount: 10000000079
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task root->5
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: COMM_E2E
> [0.000000] [sd_task/INFO] - amount: 10014000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 0->2
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10001
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 1->2
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10004
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 2->3
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskA
> [0.000000] [sd_task/INFO] - amount: 10002
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 4->5
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10029
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 6->7
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10005
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 7->8
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task 7->end
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: end-to-end communication
-> [0.000000] [sd_task/INFO] - tracing category: taskB
> [0.000000] [sd_task/INFO] - amount: 10014000
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1
> [0.000000] [sd_task/INFO] - pre-dependencies:
> [0.000000] [sd_task/INFO] Displaying task end
> [0.000000] [sd_task/INFO] - state: scheduled not runnable
> [0.000000] [sd_task/INFO] - kind: sequential computation
-> [0.000000] [sd_task/INFO] - tracing category: COMP_SEQ
> [0.000000] [sd_task/INFO] - amount: 10000000129
> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 3
> [0.000000] [sd_task/INFO] - pre-dependencies:
+++ /dev/null
-/* Copyright (c) 2006-2015. The SimGrid Team.
- * All rights reserved. */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "simgrid/simdag.h"
-#include "xbt/ex.h"
-#include "xbt/log.h"
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(sd_seq_access,
- "Logging specific to this SimDag example");
-
-int main(int argc, char **argv)
-{
- const char *platform_file;
- const SD_workstation_t *workstations;
- SD_task_t taskA, taskB, taskC;
- SD_workstation_t workstation_list[2];
- double computation_amount[2];
- double communication_amount[4] = { 0 };
- double rate = -1.0;
- SD_workstation_t w1, w2;
-
- /* SD initialization */
- SD_init(&argc, argv);
-
- /* xbt_log_control_set("sd.thres=debug"); */
-
- xbt_assert(argc > 1, "Usage: %s platform_file\n"
- "\nExample: %s two_clusters.xml", argv[0], argv[0]);
-
- /* creation of the environment */
- platform_file = argv[1];
- SD_create_environment(platform_file);
-
- /* Change the access mode of the workstations */
- workstations = SD_workstation_get_list();
- w1 = workstations[0];
- w2 = workstations[1];
-
- /* creation of the tasks and their dependencies */
- taskA = SD_task_create_comp_seq("Task A", NULL, 2e9);
- taskB = SD_task_create_comm_e2e("Task B", NULL, 2e9);
- taskC = SD_task_create_comp_seq("Task C", NULL, 1e9);
- TRACE_category ("taskA");
- TRACE_category ("taskB");
- TRACE_category ("taskC");
- TRACE_sd_set_task_category (taskA, "taskA");
- TRACE_sd_set_task_category (taskB, "taskB");
- TRACE_sd_set_task_category (taskC, "taskC");
-
- /* scheduling parameters */
- workstation_list[0] = w1;
- workstation_list[1] = w2;
- computation_amount[0] = SD_task_get_amount(taskA);
- computation_amount[1] = SD_task_get_amount(taskB);
-
- communication_amount[1] = SD_task_get_amount(taskC);
- communication_amount[2] = 0.0;
-
- SD_task_schedule(taskA, 1, &w1,
- &(computation_amount[0]), SD_SCHED_NO_COST, rate);
- SD_task_schedule(taskB, 2, workstation_list,
- SD_SCHED_NO_COST, communication_amount, rate);
- SD_task_schedule(taskC, 1, &w1,
- &(computation_amount[1]), SD_SCHED_NO_COST, rate);
-
- /* let's launch the simulation! */
- SD_simulate(-1.0);
-
- XBT_DEBUG("Destroying tasks...");
-
- SD_task_destroy(taskA);
- SD_task_destroy(taskB);
- SD_task_destroy(taskC);
-
- XBT_DEBUG("Tasks destroyed. Exiting SimDag...");
-
- SD_exit();
- return 0;
-}
> [10.000000] [sd_task/INFO] Displaying task Poor task
> [10.000000] [sd_task/INFO] - state: not runnable failed
> [10.000000] [sd_task/INFO] - kind: sequential computation
-> [10.000000] [sd_task/INFO] - tracing category: COMP_SEQ
> [10.000000] [sd_task/INFO] - amount: 20000000000
> [10.000000] [sd_task/INFO] - Dependencies to satisfy: 0
> [10.000000] [sd_fail/INFO] Task 'Poor task' has failed. 20000000000 flops remain to be done
> [50.000000] [sd_task/INFO] Displaying task Poor task
> [50.000000] [sd_task/INFO] - state: not runnable done
> [50.000000] [sd_task/INFO] - kind: sequential computation
-> [50.000000] [sd_task/INFO] - tracing category: COMP_SEQ
> [50.000000] [sd_task/INFO] - amount: 20000000000
> [50.000000] [sd_task/INFO] - Dependencies to satisfy: 0
> [50.000000] [sd_fail/INFO] Task 'Poor task' start time: 10.000000, finish time: 50.000000
+++ /dev/null
-#! ./tesh
-
-
-p Simple test of simdag
-
-$ $SG_TEST_EXENV ./simdag_tracing --cfg=tracing:yes --cfg=tracing/categorized:yes ${srcdir:=.}/2clusters.xml
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
-
-$ tail -n +3 ./simgrid.trace
-> %EventDef PajeDefineContainerType 0
-> % Alias string
-> % Type string
-> % Name string
-> %EndEventDef
-> %EventDef PajeDefineVariableType 1
-> % Alias string
-> % Type string
-> % Name string
-> % Color color
-> %EndEventDef
-> %EventDef PajeDefineStateType 2
-> % Alias string
-> % Type string
-> % Name string
-> %EndEventDef
-> %EventDef PajeDefineEventType 3
-> % Alias string
-> % Type string
-> % Name string
-> %EndEventDef
-> %EventDef PajeDefineLinkType 4
-> % Alias string
-> % Type string
-> % StartContainerType string
-> % EndContainerType string
-> % Name string
-> %EndEventDef
-> %EventDef PajeDefineEntityValue 5
-> % Alias string
-> % Type string
-> % Name string
-> % Color color
-> %EndEventDef
-> %EventDef PajeCreateContainer 6
-> % Time date
-> % Alias string
-> % Type string
-> % Container string
-> % Name string
-> %EndEventDef
-> %EventDef PajeDestroyContainer 7
-> % Time date
-> % Type string
-> % Name string
-> %EndEventDef
-> %EventDef PajeSetVariable 8
-> % Time date
-> % Type string
-> % Container string
-> % Value double
-> %EndEventDef
-> %EventDef PajeAddVariable 9
-> % Time date
-> % Type string
-> % Container string
-> % Value double
-> %EndEventDef
-> %EventDef PajeSubVariable 10
-> % Time date
-> % Type string
-> % Container string
-> % Value double
-> %EndEventDef
-> %EventDef PajeSetState 11
-> % Time date
-> % Type string
-> % Container string
-> % Value string
-> %EndEventDef
-> %EventDef PajePushState 12
-> % Time date
-> % Type string
-> % Container string
-> % Value string
-> %EndEventDef
-> %EventDef PajePopState 13
-> % Time date
-> % Type string
-> % Container string
-> %EndEventDef
-> %EventDef PajeResetState 14
-> % Time date
-> % Type string
-> % Container string
-> %EndEventDef
-> %EventDef PajeStartLink 15
-> % Time date
-> % Type string
-> % Container string
-> % Value string
-> % StartContainer string
-> % Key string
-> %EndEventDef
-> %EventDef PajeEndLink 16
-> % Time date
-> % Type string
-> % Container string
-> % Value string
-> % EndContainer string
-> % Key string
-> %EndEventDef
-> %EventDef PajeNewEvent 17
-> % Time date
-> % Type string
-> % Container string
-> % Value string
-> %EndEventDef
-> 0 1 0 HOST
-> 6 0 1 1 0 "C2-06"
-> 1 2 1 power "1 1 1"
-> 6 0 2 1 0 "C1-03"
-> 6 0 3 1 0 "C2-07"
-> 6 0 4 1 0 "C2-09"
-> 6 0 5 1 0 "C1-02"
-> 6 0 6 1 0 "C2-08"
-> 6 0 7 1 0 "C1-01"
-> 6 0 8 1 0 "C1-04"
-> 6 0 9 1 0 "C1-00"
-> 6 0 10 1 0 "C2-05"
-> 0 3 0 LINK
-> 6 0 11 3 0 "6"
-> 1 4 3 bandwidth "1 1 1"
-> 1 5 3 latency "1 1 1"
-> 6 0 12 3 0 "11"
-> 6 0 13 3 0 "3"
-> 6 0 14 3 0 "7"
-> 6 0 15 3 0 "9"
-> 6 0 16 3 0 "12"
-> 6 0 17 3 0 "2"
-> 6 0 18 3 0 "14"
-> 6 0 19 3 0 "8"
-> 6 0 20 3 0 "1"
-> 6 0 21 3 0 "4"
-> 6 0 22 3 0 "0"
-> 6 0 23 3 0 "13"
-> 6 0 24 3 0 "10"
-> 6 0 25 3 0 "5"
-> 4 6 0 3 3 0-LINK3-LINK3
-> 4 7 0 3 1 0-LINK3-HOST1
-> 4 8 0 1 3 0-HOST1-LINK3
-> 8 0 2 1 5000000000.000000
-> 8 0 2 2 1000000000.000000
-> 8 0 2 3 5000000000.000000
-> 8 0 2 4 5000000000.000000
-> 8 0 2 5 1000000000.000000
-> 8 0 2 6 5000000000.000000
-> 8 0 2 7 1000000000.000000
-> 8 0 2 8 1000000000.000000
-> 8 0 2 9 1000000000.000000
-> 8 0 2 10 5000000000.000000
-> 8 0 4 11 125000000.000000
-> 8 0 5 11 0.000100
-> 8 0 4 12 125000000.000000
-> 8 0 5 12 0.000100
-> 8 0 4 13 125000000.000000
-> 8 0 5 13 0.000100
-> 8 0 4 14 125000000.000000
-> 8 0 5 14 0.000100
-> 8 0 4 15 125000000.000000
-> 8 0 5 15 0.000100
-> 8 0 4 16 1250000000.000000
-> 8 0 5 16 0.000100
-> 8 0 4 17 125000000.000000
-> 8 0 5 17 0.000100
-> 8 0 4 18 1250000000.000000
-> 8 0 5 18 0.050000
-> 8 0 4 19 125000000.000000
-> 8 0 5 19 0.000100
-> 8 0 4 20 125000000.000000
-> 8 0 5 20 0.000100
-> 8 0 4 21 125000000.000000
-> 8 0 5 21 0.000100
-> 8 0 4 22 125000000.000000
-> 8 0 5 22 0.000100
-> 8 0 4 23 1250000000.000000
-> 8 0 5 23 0.000100
-> 8 0 4 24 125000000.000000
-> 8 0 5 24 0.000100
-> 8 0 4 25 125000000.000000
-> 8 0 5 25 0.000100
-> 15 0 6 0 topology 12 0
-> 16 0 6 0 topology 23 0
-> 15 0 6 0 topology 24 1
-> 16 0 6 0 topology 22 1
-> 15 0 6 0 topology 24 2
-> 16 0 6 0 topology 17 2
-> 15 0 6 0 topology 24 3
-> 16 0 6 0 topology 21 3
-> 15 0 7 0 topology 13 4
-> 16 0 7 0 topology 2 4
-> 15 0 6 0 topology 12 5
-> 16 0 6 0 topology 19 5
-> 15 0 7 0 topology 14 6
-> 16 0 7 0 topology 3 6
-> 15 0 7 0 topology 22 7
-> 16 0 7 0 topology 9 7
-> 15 0 7 0 topology 21 8
-> 16 0 7 0 topology 8 8
-> 15 0 8 0 topology 1 9
-> 16 0 8 0 topology 11 9
-> 15 0 7 0 topology 19 10
-> 16 0 7 0 topology 6 10
-> 15 0 6 0 topology 16 11
-> 16 0 6 0 topology 24 11
-> 15 0 6 0 topology 18 12
-> 16 0 6 0 topology 16 12
-> 15 0 6 0 topology 23 13
-> 16 0 6 0 topology 18 13
-> 15 0 6 0 topology 24 14
-> 16 0 6 0 topology 20 14
-> 15 0 7 0 topology 20 15
-> 16 0 7 0 topology 7 15
-> 15 0 6 0 topology 24 16
-> 16 0 6 0 topology 13 16
-> 15 0 6 0 topology 12 17
-> 16 0 6 0 topology 25 17
-> 15 0 6 0 topology 11 18
-> 16 0 6 0 topology 12 18
-> 15 0 6 0 topology 12 19
-> 16 0 6 0 topology 14 19
-> 15 0 6 0 topology 12 20
-> 16 0 6 0 topology 15 20
-> 15 0 7 0 topology 25 21
-> 16 0 7 0 topology 10 21
-> 15 0 7 0 topology 15 22
-> 16 0 7 0 topology 4 22
-> 15 0 7 0 topology 17 23
-> 16 0 7 0 topology 5 23
-> 1 9 3 bCOMP_SEQ "0.800026 0.545312 0.857926"
-> 1 10 1 pCOMP_SEQ "0.800026 0.545312 0.857926"
-> 1 11 3 bCOMM_E2E "0.904944 0.089118 0.069832"
-> 1 12 1 pCOMM_E2E "0.904944 0.089118 0.069832"
-> 1 13 3 btaskA "0.696799 0.247098 0.497311"
-> 1 14 1 ptaskA "0.696799 0.247098 0.497311"
-> 1 15 3 btaskB "0.623917 0.040883 0.634111"
-> 1 16 1 ptaskB "0.623917 0.040883 0.634111"
-> 1 17 3 btaskC "0.832485 0.956278 0.337734"
-> 1 18 1 ptaskC "0.832485 0.956278 0.337734"
-> 7 8.000300 1 10
-> 7 8.000300 1 1
-> 7 8.000300 1 3
-> 7 8.000300 1 6
-> 7 8.000300 1 4
-> 7 8.000300 1 9
-> 7 8.000300 3 24
-> 7 8.000300 1 7
-> 7 8.000300 3 12
-> 7 8.000300 1 5
-> 7 8.000300 3 16
-> 7 8.000300 1 2
-> 7 8.000300 3 23
-> 7 8.000300 1 8
-> 7 8.000300 3 18
-> 7 8.000300 3 22
-> 7 8.000300 3 20
-> 7 8.000300 3 17
-> 7 8.000300 3 13
-> 7 8.000300 3 21
-> 7 8.000300 3 25
-> 7 8.000300 3 11
-> 7 8.000300 3 14
-> 7 8.000300 3 19
-> 7 8.000300 3 15
-
-$ rm -f simgrid.trace
XBT_PUBLIC(void) TRACE_category_with_color (const char *category, const char *color);
XBT_PUBLIC(xbt_dynar_t) TRACE_get_categories (void);
XBT_PUBLIC(void) TRACE_smpi_set_category(const char *category);
-XBT_PUBLIC(void) TRACE_sd_set_task_category(SD_task_t task,
- const char *category);
/*
* Functions to manage tracing marks (used for trace comparison experiments)
+++ /dev/null
-/* Copyright (c) 2013-2016. The SimGrid Team.
- * All rights reserved. */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include "src/instr/instr_private.h"
-#include "src/simdag/simdag_private.h"
-#include "simgrid/simdag.h"
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_sd, instr, "SD");
-
-void TRACE_sd_set_task_category(SD_task_t task, const char *category){
-
- //if user provides a NULL category, task is no longer traced
- if (category == NULL) {
- xbt_free (task->category);
- task->category = NULL;
- XBT_DEBUG("SD task %p(%s), category removed", task, task->name);
- return;
- }
-
- //set task category
- xbt_free(task->category);
- task->category = xbt_strdup (category);
- XBT_DEBUG("SD task %p(%s), category %s", task, task->name, task->category);
-}
-
-void TRACE_sd_task_create(SD_task_t task)
-{
- static long long counter = 0;
- task->counter = counter++;
- task->category = NULL;
-
- XBT_DEBUG("CREATE %p, %lld", task, task->counter);
-}
-
-void TRACE_sd_task_execute_start(SD_task_t task)
-{
- if (task->kind == SD_TASK_COMP_PAR_AMDAHL || task->kind == SD_TASK_COMP_SEQ){
- XBT_DEBUG("EXEC,in %p, %lld, %s", task, task->counter, task->category);
-// int i;
-// for (i = 0; i < task->workstation_nb; i++){
-// container_t workstation_container =
-// PJ_container_get (sg_host_get_name(task->workstation_list[i]));
-// char name[1024];
-// type_t type = PJ_type_get ("power_used", workstation_container->type);
-// sprintf(name, "%s_ws_%d", SD_task_get_name(task), i);
-// val_t value = PJ_value_new(name, "1 0 1", type);
-// new_pajePushState (SD_get_clock(), workstation_container, type, value);
-// }
- }
-}
-
-void TRACE_sd_task_execute_end(SD_task_t task)
-{
- if (task->kind == SD_TASK_COMP_PAR_AMDAHL || task->kind == SD_TASK_COMP_SEQ){
- XBT_DEBUG("EXEC,out %p, %lld, %s", task, task->counter, task->category);
-// int i;
-// for (i = 0; i < task->workstation_nb; i++){
-// container_t workstation_container =
-// PJ_container_get (sg_host_get_name(task->workstation_list[i]));
-// type_t type = PJ_type_get ("power_used", workstation_container->type);
-// new_pajePopState (SD_get_clock(), workstation_container, type);
-// }
- }
-}
-
-void TRACE_sd_task_destroy(SD_task_t task)
-{
- XBT_DEBUG("DESTROY %p, %lld, %s", task, task->counter, task->category);
-
- //free category
- xbt_free(task->category);
- task->category = NULL;
- return;
-}
-
newfile = SD_task_create_comm_e2e(file->name, NULL, file->amount);
SD_task_dependency_add(NULL, NULL, root_task, newfile);
SD_task_dependency_add(NULL, NULL, newfile, depafter->dst);
- if (depafter->src){
- const char *category = depafter->src->category;
- if (category){
- TRACE_category (category);
- TRACE_sd_set_task_category(newfile, category);
- }
- }
xbt_dynar_push(result, &newfile);
}
} else if (xbt_dynar_is_empty(file->tasks_after)) {
newfile = SD_task_create_comm_e2e(file->name, NULL, file->amount);
SD_task_dependency_add(NULL, NULL, depbefore->src, newfile);
SD_task_dependency_add(NULL, NULL, newfile, end_task);
- if (depbefore->src){
- const char *category = depbefore->src->category;
- if (category){
- TRACE_category (category);
- TRACE_sd_set_task_category(newfile, category);
- }
- }
xbt_dynar_push(result, &newfile);
}
} else {
newfile = SD_task_create_comm_e2e(file->name, NULL, file->amount);
SD_task_dependency_add(NULL, NULL, depbefore->src, newfile);
SD_task_dependency_add(NULL, NULL, newfile, depafter->dst);
- if (depbefore->src){
- const char *category = depbefore->src->category;
- if (category){
- TRACE_category (category);
- TRACE_sd_set_task_category(newfile, category);
- }
- }
xbt_dynar_push(result, &newfile);
}
}
runtime *= 4200000000.; /* Assume that timings were done on a 4.2GFlops machine. I mean, why not? */
// XBT_INFO("See <job id=%s runtime=%s %.0f>",A_dax__job_id,A_dax__job_runtime,runtime);
current_job = SD_task_create_comp_seq(name, NULL, runtime);
- char *category = A_dax__job_name;
- if (category){
- TRACE_category (category);
- TRACE_sd_set_task_category(current_job, category);
- }
xbt_dict_set(jobs, A_dax__job_id, current_job, NULL);
free(name);
xbt_dynar_push(result, ¤t_job);
SD_task_destroy(*t);
}
-static void TRACE_sd_dotloader (SD_task_t task, const char *category) {
- if (category && strlen (category)){
- if (task->category)
- XBT_DEBUG("Change the category of %s from %s to %s",
- task->name, task->category, category);
- else
- XBT_DEBUG("Set the category of %s to %s",task->name, category);
- TRACE_category (category);
- TRACE_sd_set_task_category(task, category);
- }
-}
-
/** @brief loads a DOT file describing a DAG
*
* See http://www.graphviz.org/doc/info/lang.html
} else {
task = SD_task_create_comp_par_amdahl(name, NULL , amount, alpha);
}
- TRACE_sd_dotloader (task, agget (node, (char*)"category"));
xbt_dict_set(jobs, name, task, NULL);
if (!strcmp(name, "root")){
/* by design the root task is always SCHEDULABLE */
task = SD_task_create_comm_e2e(name, NULL , size);
else
task = SD_task_create_comm_par_mxn_1d_block(name, NULL , size);
- TRACE_sd_dotloader (task, agget (node, (char*)"category"));
SD_task_dependency_add(NULL, NULL, src, task);
SD_task_dependency_add(NULL, NULL, task, dst);
xbt_dict_set(jobs, name, task, NULL);
sd_global->task_number++;
- TRACE_sd_task_create(task);
-
return task;
}
res->bytes_amount[2] = amount;
res->kind = SD_TASK_COMM_E2E;
- TRACE_category("COMM_E2E");
- TRACE_sd_set_task_category(res, "COMM_E2E");
-
return res;
}
res->flops_amount[0] = flops_amount;
res->kind = SD_TASK_COMP_SEQ;
- TRACE_category("COMP_SEQ");
- TRACE_sd_set_task_category(res, "COMP_SEQ");
-
return res;
}
res->alpha = alpha;
res->kind = SD_TASK_COMP_PAR_AMDAHL;
- TRACE_category("COMP_PAR_AMDAHL");
- TRACE_sd_set_task_category(res, "COMP_PAR_AMDAHL");
-
return res;
}
res->workstation_list=NULL;
res->kind = SD_TASK_COMM_PAR_MXN_1D_BLOCK;
- TRACE_category("COMM_PAR_MXN_1D_BLOCK");
- TRACE_sd_set_task_category(res, "COMM_PAR_MXN_1D_BLOCK");
-
return res;
}
xbt_free(task->bytes_amount);
xbt_free(task->flops_amount);
- TRACE_sd_task_destroy(task);
-
xbt_mallocator_release(sd_global->task_mallocator,task);
sd_global->task_number--;
XBT_LOG_CONNECT(instr_paje_values);
XBT_LOG_CONNECT(instr_resource);
XBT_LOG_CONNECT(instr_routing);
- XBT_LOG_CONNECT(instr_sd);
XBT_LOG_CONNECT(instr_surf);
XBT_LOG_CONNECT(instr_trace);
XBT_LOG_CONNECT(instr_TI_trace);
)
set(SIMDAG_SRC
- src/simdag/instr_sd_task.cpp
src/simdag/sd_daxloader.cpp
src/simdag/sd_global.cpp
src/simdag/sd_task.cpp
ADD_TESH(simdag-prop --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/properties/test_prop.tesh)
ADD_TESH(simdag-minmin-scheduling --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/scheduling --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag/scheduling test_minmin.tesh)
ADD_TESH(simdag-io --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/simdag/io/io.tesh)
- ADD_TESH(tracing-simdag --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_tracing.tesh)
# END TESH TESTS
IF(WIN32)