我想编写一个使用并行计算(Open MP 库)计算整数阶乘的程序。
显然,下面的程序存在竞争条件。
// Each loop iteration writes a value that a different iteration reads.
#pragma omp parallel for
for (i=2; i < 10; i++)
{
factorial[i] = i * factorial[i-1];
}
Run Code Online (Sandbox Code Playgroud)
我在某处读到 pow 和阶乘计算绝不能并行完成。那么,这是真的,还是可以修改上述程序(在 C 中,使用 OPenMP 库)以并行计算阶乘?
我正在尝试从ns-3(网络仿真软件)程序中获取错误。
我在gdb下运行它:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff4850195 in ns3::MpTcpBulkSendApplication::StartApplication (this=0x706850) at ../src/applications/model/mp-tcp-bulk-send-application.cc:170
170 m_socket->Bind();
(gdb) bt
#0 0x00007ffff4850195 in ns3::MpTcpBulkSendApplication::StartApplication (this=0x706850) at ../src/applications/model/mp-tcp-bulk-send-application.cc:170
#1 0x00007ffff09f9b45 in ns3::EventImpl* ns3::MakeEvent<void (ns3::Application::*)(), ns3::Application*>(void (ns3::Application::*)(), ns3::Application*)::EventMemberImpl0::Notify() (this=0x62f440) at ./ns3/make-event.h:94
#2 0x00007ffff02e90ef in ns3::EventImpl::Invoke (this=0x62f440) at ../src/core/model/event-impl.cc:45
#3 0x00007ffff02ee3a9 in ns3::DefaultSimulatorImpl::ProcessOneEvent (this=0x6d2d00) at ../src/core/model/default-simulator-impl.cc:141
#4 0x00007ffff02ee7ac in ns3::DefaultSimulatorImpl::Run (this=0x6d2d00) at ../src/core/model/default-simulator-impl.cc:194
#5 0x00007ffff02e9ff5 in ns3::Simulator::Run () at ../src/core/model/simulator.cc:161
#6 0x0000000000410640 in main (argc=1, argv=0x7fffffffdc58) at ../scratch/doordi3.cc:188
Run Code Online (Sandbox Code Playgroud)
我不明白发生了什么,是什么导致了错误。任何帮助都将受到欢迎。
谢谢。
此函数是发生错误的地方:
// Application Methods
void …Run Code Online (Sandbox Code Playgroud)