小编mer*_*ert的帖子

OpenMP time和clock()计算两个不同的结果

我有通过OpenMP并行化的顺序代码.我已经放了相应的pragma并测试它.在测试时,我通过检查主要功能所花费的时间来解释性能提升.奇怪的是通过计算的经过时间cpu_time()omp_get_wtime()返回两个不同的结果.您认为原因是什么?

通过cpu_time()函数计算的经过时间与顺序时间类似.

在计算开始之前

ctime1_ = cpu_time();
#ifdef _OPENMP
ctime1 = omp_get_wtime();
#endif
Run Code Online (Sandbox Code Playgroud)

计算结束后

ctime2_ = cpu_time();
#ifdef _OPENMP
ctime2 = omp_get_wtime();
#endif
Run Code Online (Sandbox Code Playgroud)

cpu_time()函数定义

double cpu_time(void)
{
  double value;
  value = (double) clock () / (double) CLOCKS_PER_SEC;
  return value;
}
Run Code Online (Sandbox Code Playgroud)

打印结果

printf("%f - %f seconds.\n", ctime2 - ctime1, ctime2_ - ctime1_);
Run Code Online (Sandbox Code Playgroud)

样本结果

7.009537 - 11.575277 seconds.
Run Code Online (Sandbox Code Playgroud)

c openmp

11
推荐指数
3
解决办法
2万
查看次数

我们如何删除Dart中的对象?

我想基本上删除我创建的对象.我们如何删除对象?

在这里检查了Object定义,但无法弄清楚这样做的方法.我也很好奇我们是否可以定义析构函数.

更新 问题是获得好的答案.但我想提请你注意我想要删除我的对象或调用析构函数的情况.假设我们想要使用您可以通过放置在其上的端口连接矩形来创建节奏.因此,我们的想法是拥有一个对象,该对象具有对矩形体的引用和两端的端口.实际上,该对象可能需要一些其他属性,如[bool] selected[bool] dragging[List<RectElement>] connectedSquares.例如,当用户选择矩形并命中退格时,我想确保矩形消失并且我的对象被正确删除.因此,这个用例可以更深入地了解这个问题.

dart

9
推荐指数
2
解决办法
5362
查看次数

iOS函数调用一次(初始化应用程序时)

我有一个iOS应用程序.应用程序有2种不同的视图:Main和Settings.实际上,应用程序需要在主视图中使用之前加载和初始化某些库和框架.

当我把这个初始化放在viewDidLoad方法中时,它工作正常.但是当转到"设置"并返回"主视图"时,初始化将再次启动,这不是我想要的,并且应用程序会导致内存问题.

我需要一个在应用程序启动时调用一次的方法.任何的想法?

编辑:我切换到选项卡视图.它加载一次视图.这是另一种解决方案.

objective-c viewdidload ios

5
推荐指数
2
解决办法
7394
查看次数

无法在内存中的 sqlite 数据库上创建表而没有任何错误消息

我正在尝试在内存中的 sqlite 数据库上创建一个表。我有一个方法被调用createTable来创建一个表,该表用getConnection方法初始化到数据库的连接。

创建表:

private void createTable() {
    try {
        final Connection connection = getConnection();
        final Statement statement = connection.createStatement();
        statement.execute(
            "CREATE TABLE videos (id INTEGER PRIMARY KEY, title VARCHAR(255), description TEXT, path TEXT, category VARCHAR(255), published INTEGER DEFAULT 0, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP);");
        statement.close();
        connection.close();
    } catch (final SQLException e) {
        LOGGER.warn("Failed to create table.", e);
    }
}
Run Code Online (Sandbox Code Playgroud)

获取连接

private static Connection getConnection() {
    try {
        Class.forName("org.sqlite.JDBC");
        return DriverManager.getConnection("jdbc:sqlite:");
    } catch (final Exception e) { …
Run Code Online (Sandbox Code Playgroud)

java sqlite jdbc

5
推荐指数
1
解决办法
1599
查看次数

使用自定义边框绘制网格

Flot使我们能够自定义网格边框.这在此处记录如下:

grid: {
    borderWidth: number or object with "top", "right", "bottom" and "left" properties with different widths
    borderColor: color or null or object with "top", "right", "bottom" and "left" properties with different colors
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法想出一个成功的工作示例.要创建一个带有白色顶部和左边框的自定义网格,我尝试了以下操作,但它不起作用:

grid: {
    borderWidth: {top: 1, right: 0, bottom: 0, left: 1},
    borderColor: {top: "#FFF", left: "#FFF"}
}
Run Code Online (Sandbox Code Playgroud)

谁能提供一个有效的例子?

javascript flot

3
推荐指数
1
解决办法
6512
查看次数

同时运行两个C程序共享内存,怎么样?

我有两个c文件:producer.c和consumer.c.Consumer在内存中创建共享缓冲区,并等待生产者将项目放入缓冲区以供使用.生产者将共享内存附加到其内存映射,然后开始将项目放入缓冲区.

问题是如何编译和运行它们?

这是实际的任务.(我知道我可以使用一个c文件使用线程,但这不是我被要求做的.)

在这一部分中,您将开发一个生产者 - 消费者应用程序,它将使用共享内存进行进程通信(POSIX共享内存,而不是System V共享内存).将有N个生产者和N个消费者.N可以是1,2或3.

您将开发一个生产者程序(producer.c)和一个使用者程序(consumer.c).启动时,生产者程序将创建N个子进程,这些进程将充当N个生成器(即每个子进程将是生产者进程).

类似地,当启动时,消费者程序将创建N个子进程,其中每个子进程将充当消费者进程.你会认为消费者被识别为0,1,2,取决于N.例如,如果N是2,那么将有两个消费者,0和1.

消费者计划将首先运行.运行时,使用者程序将首先创建大小为4 KB的共享内存.这个共享内存将是您将拥有共享单个缓冲区的位置.生产者和消费者可以访问缓冲区.缓冲区大小为100.它最多可以容纳100个项目(整数).在共享内存中,您可以使用其他一些您认为必要的共享变量.消费者程序还将创建一个或多个信号量(您决定了多少).

然后它将使用fork()系统调用创建N个子进程(N个使用者)(您不需要使用exec()系统调用).在创建子进程之后,消费者程序(父进程)的主要进程不应该终止.它应该等到所有孩子(即消费者)完成任务并终止.当所有子节点终止时,它将从系统中删除(删除)共享内存.它还将删除(删除)信号量.然后它也可以终止.

每个生产者将读取正整数的输入文件(每行一个整数),并且只通过位于生产者和消费者之间的共享内存(由消费者程序创建)中的共享缓冲区传递整数.

如果z mod N等于消费者的ID,则每个消费者将从共享缓冲区读取整数并将接收的整数z写入与消费者相关联的输出文件.例如,如果N为3且消费者的ID为2且消费者已收到整数7,则它将不执行任何操作(忽略),但如果它收到8,则会将整数写入其输出文件.输出文件将在一行中包含一个整数.当生产者和消费者访问共享缓冲区时,他们应该使用信号量以便访问同步.另外,如果缓冲区已满,生产者应该睡觉,如果没有消费,消费者应该睡觉.我们不应该忙着等待.您将使用POSIX信号量(命名信号量).消费者计划将按如下方式调用:
消费者N ...

这里,N是要创建的使用者进程的数量.此参数的值必须与生产者程序的相应参数相同.这里是消费者将使用ID X的输出文件的名称.输入的输出文件名的数量将等于N.是我们可以用来标识共享内存的名称.是我们可以用来标识信号量的名称(它可以是可用于许多信号量名称的前缀).调用生产者时必须使用这些相同的名称.生产者程序将被命名为生产者,并将使用以下参数调用:
producer N ...

这里,N是生产者的数量.它是生产者X的输入文件的名称.输入文件是存储整数的文本文件.我们输入的输入文件名的数量将等于N.文件中可以有一个或多个整数.输入文件可能非常庞大(数十亿整数).是我们可以用来识别共享内存的名称.是我们可以用来识别信号量的名称.

程序的示例调用可以如下所示.
消费者3 out0.txt out1.txt out2.txt mysmem mysemaphores producer 3 in0.txt in1.txt in2.txt mysmem mysemaphore

c memory shared

2
推荐指数
1
解决办法
2819
查看次数

使用C获取系统的总内存

我试图通过C获得全部和可能的系统空闲内存.它应该是系统无关的.

要启动讨论,我可以建议使用getpagesize()方法来获取页面大小.任何人都可以帮助关于内存页面的数量会很好.

c memory

1
推荐指数
1
解决办法
868
查看次数

Numpy arange over numpy arrays

我有一个基本上返回广义谐波数的函数.

def harmonic(limit, z):
   return numpy.sum(1.0/numpy.arange(1, limit+1)**z)
Run Code Online (Sandbox Code Playgroud)

以下是当前函数定义的两个示例:

>>> harmonic(1, 1)
1.0
>>> harmonic(2, 1)
1.5
Run Code Online (Sandbox Code Playgroud)

正如您可能猜到的那样,当limit标量时它可以正常工作,但是如何使这个功能也适用于1D和2D数组呢?

以下演示了我想要实现的函数的示例输出

>>> limit = np.array([[1, 2], [3, 4]])
>>> harmonic(limit, 1)
array([[1.0, 1.5], [1.833, 2.083]])
Run Code Online (Sandbox Code Playgroud)

python numpy

1
推荐指数
1
解决办法
443
查看次数

将Iterables转换为Collection会迭代所有元素吗?

这是Iterables.isEmpty()(ref)的源代码:

public static boolean isEmpty(Iterable<?> iterable) {
    if (iterable instanceof Collection) {
      return ((Collection<?>) iterable).isEmpty();
    }
    return !iterable.iterator().hasNext();
}
Run Code Online (Sandbox Code Playgroud)

我想知道如果Iterables.isEmpty()给定iterable参数是一个Set扩展的类型,方法是否迭代所有元素Collection.难道铸造IterableCollection原因完整的迭代?如果是这样,为什么?如果没有,为什么不呢?

java guava

1
推荐指数
1
解决办法
96
查看次数

标签 统计

c ×3

java ×2

memory ×2

dart ×1

flot ×1

guava ×1

ios ×1

javascript ×1

jdbc ×1

numpy ×1

objective-c ×1

openmp ×1

python ×1

shared ×1

sqlite ×1

viewdidload ×1